home *** CD-ROM | disk | FTP | other *** search
- (*
-
- John Tal
- Rollins
- (313) 423-7200
- *)
-
- (* ---- *)
- MODULE M2Format;
-
-
-
- (* Formats Pascal (? or Modula-2) programs from multi-statement lines
-
- to single statement lines. Found to be very useful in converting
-
- Turbo Pascal programs into Modula-2.
-
-
-
- 06/10/86 John Tal
-
- Rollins Medical/Dental Systems
-
- Southfield, MI
-
- *)
-
-
-
- FROM FileSystem IMPORT Response,File;
-
- FROM InOut IMPORT Done,EOL,in,out,
-
- OpenInput,OpenOutput,CloseInput,CloseOutput,
-
- Read,ReadString,Write,WriteString,WriteLn;
-
- FROM Strings IMPORT Copy,Pos;
-
-
-
- IMPORT ASCII;
-
- IMPORT Terminal;
-
-
-
-
-
- TYPE
-
- STRING = ARRAY [0..255] OF CHAR;
-
-
-
- VAR
-
- newline,line,curLine:STRING;
-
- EndFile: BOOLEAN;
-
- infile,outfile,tempStr: STRING;
-
- blanks:CARDINAL;
-
-
-
- PROCEDURE ReadLine(VAR Str: ARRAY OF CHAR);
-
- VAR
-
- i: CARDINAL;
-
- ch: CHAR;
-
- BEGIN
-
- i := 0;
-
- ch := ' ';
-
- Read(ch);
-
- LOOP
-
- IF (ch = ASCII.EOL) OR (ch = ASCII.sub) THEN EXIT; END;
-
- Str[i] := ch;
-
- INC(i);
-
- IF i = 255 THEN EXIT; END;
-
- Read(ch);
-
- END;
-
- Str[i] := CHR(0);
-
- IF (ch = ASCII.sub) OR (ch = ASCII.nul) THEN in.eof := TRUE; END;
-
- END ReadLine;
-
-
-
-
-
- PROCEDURE FindBlank(VAR curLine: ARRAY OF CHAR; VAR blanks: CARDINAL);
-
- BEGIN
-
- blanks := 0;
-
- WHILE curLine[blanks] = ' ' DO
-
- INC(blanks);
-
- END;
-
- END FindBlank;
-
-
-
- PROCEDURE SplitLine(VAR curLine: ARRAY OF CHAR; blanks: CARDINAL);
-
- VAR
-
- semi: ARRAY[0..1] OF CHAR;
-
- holdLine,tempStr,temp2Str: ARRAY[0..255] OF CHAR;
-
- a: CARDINAL;
-
- BEGIN
-
- semi[0] := ';';
-
- semi[1] := CHR(0);
-
- a := Pos(semi,curLine);
-
- IF a < HIGH(curLine) THEN
-
- WHILE a < HIGH(curLine) DO
-
- Copy(curLine,0,a+1,tempStr);
-
- WriteString(tempStr);
-
- WriteLn;
-
- Copy(curLine,a+1,HIGH(curLine),holdLine);
-
- IF blanks > 0 THEN
-
- ToSpaces(temp2Str,blanks-1);
-
- ELSE
-
- temp2Str := "";
-
- END;
-
- Concat(temp2Str,holdLine,curLine);
-
- (* to maintain indentation *)
-
- a := Pos(semi,curLine);
-
- END;
-
- ELSE
-
- WriteString(curLine);
-
- WriteLn;
-
- END;
-
- END SplitLine;
-
-
-
-
-
- PROCEDURE Length(VAR source:ARRAY OF CHAR):CARDINAL;
-
- VAR
-
- i:CARDINAL;
-
- ch:CHAR;
-
- BEGIN
-
- i:=0;
-
- ch := source[i];
-
- WHILE (ch <> CHR(0)) AND (i < HIGH(source)) DO
-
- INC(i);
-
- ch := source[i];
-
- END;
-
- RETURN i;
-
- END Length;
-
-
-
- PROCEDURE Concat(VAR s1,s2:ARRAY OF CHAR;VAR result:ARRAY OF CHAR);
-
- VAR
-
- i,j:CARDINAL;
-
- BEGIN
-
- j:= Length(s1);
-
- FOR i:= 0 TO j DO
-
- result[i] := s1[i];
-
- END;
-
- FOR i := 0 TO Length(s2) DO
-
- result[i+j] := s2[i];
-
- END;
-
- END Concat;
-
-
-
- PROCEDURE ToSpaces(VAR dest : ARRAY OF CHAR; i : CARDINAL);
-
- VAR
-
- q : CARDINAL;
-
- BEGIN
-
- IF i > 0 THEN
-
- FOR q:=0 TO i-1 DO
-
- dest[q]:=' ';
-
- END;
-
- dest[i]:=CHR(0);
-
- ELSE
-
- dest[0]:=CHR(0);
-
- END;
-
- END ToSpaces;
-
-
-
- BEGIN
-
- Terminal.WriteLn;
-
- Terminal.WriteString('M2Format - Formats Structured Programs to 1 statement per line.');
-
- Terminal.WriteLn;
-
- Terminal.WriteString('---------------------------------------------------------------');
-
- Terminal.WriteLn;
-
- Terminal.WriteLn;
-
- Terminal.WriteString('M2Format ');
-
- OpenInput("PAS");
-
- IF Done THEN
-
- Terminal.WriteString('M2Format ');
-
- OpenOutput("MOD");
-
- Terminal.WriteLn;
-
- Terminal.WriteString('Processing...');
-
- Terminal.WriteLn;
-
- WHILE NOT in.eof DO
-
- ReadLine(curLine);
-
- FindBlank(curLine,blanks);
-
- SplitLine(curLine,blanks);
-
- END;
-
- CloseInput;
-
- CloseOutput;
-
- Terminal.WriteString('Done!');
-
- Terminal.WriteLn;
-
- ELSE
-
- Terminal.WriteString('Error opening file.');
-
- Terminal.WriteLn;
-
- END;
-
- END M2Format.
-